home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 February: Technology Seed / Mac Tech Seed Feb '97.toast / ODF Release 3 / ODFDev / ODF / OS / FWGraphx / SLGDev.cpp < prev    next >
Encoding:
Text File  |  1996-12-16  |  6.8 KB  |  238 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                SLGDev.cpp
  4. //    Release Version:    $ ODF 3 $
  5. //
  6. //    Copyright:    (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #include "FWOS.hpp"
  11.  
  12. #ifndef SLGDEV_H
  13. #include "SLGDev.h"
  14. #endif
  15.  
  16. #ifndef PRGDEV_H
  17. #include "PRGDev.h"
  18. #endif
  19.  
  20. #if defined(FW_BUILD_WIN) && !defined(SOM_ODWin32StandardCanvas_xh)
  21. #include <WinSCanv.xh>
  22. #endif
  23.  
  24. #if defined(FW_BUILD_WIN) && !defined(SOM_ODWin32WindowCanvas_xh)
  25. #include <WinWCanv.xh>
  26. #endif
  27.  
  28.  
  29. //========================================================================================
  30. // Graphics device
  31. //========================================================================================
  32.  
  33. #ifdef FW_BUILD_MAC
  34. #pragma segment FWGraphics_GDevice
  35. #endif
  36.  
  37. //----------------------------------------------------------------------------------------
  38. //    FW_PrivGDev_CreateFromODCanvas
  39. //----------------------------------------------------------------------------------------
  40.  
  41. FW_HGDevice SL_API FW_PrivGDev_CreateFromODCanvas(Environment *ev, ODCanvas* odCanvas)
  42. {
  43. FW_UNUSED(ev);
  44.  
  45.     FW_HGDevice device = 0;
  46.     FW_SOM_TRY
  47.     {
  48.         device = FW_NEW(FW_CPrivGraphicsDevice, (odCanvas));
  49.         device->Acquire();
  50.     }
  51.     FW_SOM_CATCH
  52.     return device;
  53. }
  54.  
  55. //----------------------------------------------------------------------------------------
  56. //    FW_PrivGDev_CreateFromPlatformCanvas
  57. //----------------------------------------------------------------------------------------
  58.  
  59. FW_HGDevice SL_API FW_PrivGDev_CreateFromPlatformCanvas(Environment *ev, FW_PlatformCanvas platformCanvas)
  60. {
  61. FW_UNUSED(ev);
  62.  
  63.     FW_HGDevice device = 0;
  64.     FW_SOM_TRY
  65.     {
  66.         device = FW_NEW(FW_CPrivGraphicsDevice, (platformCanvas));
  67.         device->Acquire();
  68.     }
  69.     FW_SOM_CATCH
  70.     return device;
  71. }
  72.  
  73. //----------------------------------------------------------------------------------------
  74. //    FW_PrivGDev_WinCreateFromHDC
  75. //----------------------------------------------------------------------------------------
  76. #ifdef FW_BUILD_WIN
  77. FW_PlatformCanvas SL_API FW_PrivGDev_WinCreateFromHDC(Environment *ev, HDC anHDC)
  78. {
  79.     FW_PlatformCanvas platformCanvas = 0;
  80.  
  81.     FW_SOM_TRY
  82.     {
  83.         platformCanvas = new ODWin32StandardCanvas;
  84.         platformCanvas->InitPlatformCanvas(ev, anHDC);
  85.     }
  86.     FW_SOM_CATCH
  87.  
  88.     return platformCanvas;
  89. }
  90. #endif
  91.  
  92. //----------------------------------------------------------------------------------------
  93. //    FW_PrivGDev_WinCreateFromHWND
  94. //----------------------------------------------------------------------------------------
  95. #ifdef FW_BUILD_WIN
  96. FW_PlatformCanvas SL_API FW_PrivGDev_WinCreateFromHWND(Environment *ev, HWND anHWND)
  97. {
  98.     FW_PlatformCanvas platformCanvas = 0;
  99.  
  100.     FW_SOM_TRY
  101.     {
  102.         platformCanvas = new ODWin32WindowCanvas;
  103.         platformCanvas->InitPlatformWindowCanvas(ev, anHWND);
  104.     }
  105.     FW_SOM_CATCH
  106.  
  107.     return platformCanvas;
  108. }
  109. #endif
  110.  
  111. //----------------------------------------------------------------------------------------
  112. //    FW_PrivGDev_Acquire
  113. //----------------------------------------------------------------------------------------
  114.  
  115. void SL_API FW_PrivGDev_Acquire(FW_HGDevice gdev)
  116. {
  117.     // No try block necessary - Do not throw
  118.     gdev->Acquire();
  119. }
  120.  
  121. //----------------------------------------------------------------------------------------
  122. //    FW_PrivGDev_Release
  123. //----------------------------------------------------------------------------------------
  124.  
  125. void SL_API FW_PrivGDev_Release(FW_HGDevice gdev)
  126. {
  127.     // No try block necessary - Do not throw
  128.     gdev->Release();
  129. }
  130.  
  131. //----------------------------------------------------------------------------------------
  132. //    FW_PrivGDev_GetPlatformCanvas
  133. //----------------------------------------------------------------------------------------
  134.  
  135. FW_PlatformCanvas SL_API FW_PrivGDev_GetPlatformCanvas(FW_HGDevice gdev)
  136. {
  137.     // No try block necessary - Do not throw
  138.     return gdev->GetPlatformCanvas();
  139. }
  140.  
  141. //----------------------------------------------------------------------------------------
  142. //    FW_PrivGDev_GetFontMetrics
  143. //----------------------------------------------------------------------------------------
  144.  
  145. FW_PlatformError SL_API FW_PrivGDev_GetFontMetrics(FW_HGDevice gdev, FW_HFont font, FW_PlatformFontMetrics& metrics)
  146. {
  147.     FW_RETURN_ERR_TRY
  148.     {
  149.         gdev->SelectFont(font, FALSE);    // FALSE means no scaling
  150.     
  151. #ifdef FW_BUILD_MAC
  152. FW_UNUSED(gdev);
  153.         ::GetFontInfo(&metrics);
  154. #endif
  155.     
  156. #ifdef FW_BUILD_WIN
  157.         FW_SOMEnvironment ev;
  158.         HDC dc = gdev->GetPlatformCanvas()->GetDC(ev);
  159.         ::SetMapMode(dc, MM_ANISOTROPIC);
  160.         
  161.         SIZE sizeOldWinExt;
  162.         ::SetWindowExtEx(dc, 1440, 1440, &sizeOldWinExt);
  163.         
  164.         SIZE sizeOldViewExt;
  165.         ::SetViewportExtEx(dc, ::GetDeviceCaps(dc, LOGPIXELSX), ::GetDeviceCaps(dc, LOGPIXELSY), &sizeOldViewExt);
  166.         
  167.         ::GetTextMetrics(dc, &metrics);
  168.         
  169.         ::SetMapMode(dc, MM_TEXT);
  170.         ::SetWindowExtEx(dc, sizeOldWinExt.cx, sizeOldWinExt.cx, NULL);
  171.         ::SetViewportExtEx(dc, sizeOldViewExt.cx, sizeOldViewExt.cy, NULL);
  172. #endif
  173.     }
  174.     FW_RETURN_ERR_CATCH
  175. }
  176.  
  177. //----------------------------------------------------------------------------------------
  178. //    FW_PrivGDev_GetResolution
  179. //----------------------------------------------------------------------------------------
  180.  
  181. FW_PlatformError SL_API FW_PrivGDev_GetResolution(FW_HGDevice gdev, FW_SPoint& pt)
  182. {
  183.     // No try block necessary - Do not throw
  184.     pt = gdev->GetResolution();
  185.     return FW_xNoError;
  186. }
  187.  
  188. //----------------------------------------------------------------------------------------
  189. //    FW_PrivGDev_Suspend
  190. //----------------------------------------------------------------------------------------
  191.  
  192. FW_SPrivSuspendResumeState*    SL_API FW_PrivGDev_Suspend(FW_HGDevice gdev, FW_PlatformError* error)
  193. {
  194.     FW_ERR_TRY
  195.     {
  196.         return gdev->Suspend();
  197.     }
  198.     FW_ERR_CATCH
  199.     return NULL;
  200. }
  201.  
  202. //----------------------------------------------------------------------------------------
  203. //    FW_PrivGDev_Resume
  204. //----------------------------------------------------------------------------------------
  205.  
  206. void SL_API FW_PrivGDev_Resume(FW_HGDevice gdev, FW_SPrivSuspendResumeState *suspendResumeState, FW_PlatformError* error)
  207. {
  208.     FW_ERR_TRY
  209.     {
  210.         gdev->Resume(suspendResumeState);
  211.     }
  212.     FW_ERR_CATCH
  213. }
  214.  
  215. //----------------------------------------------------------------------------------------
  216. //    FW_PrivGDev_SetResolution
  217. //----------------------------------------------------------------------------------------
  218.  
  219. FW_PlatformError SL_API FW_PrivGDev_SetResolution(FW_HGDevice gdev, FW_Fixed x, FW_Fixed y)
  220. {
  221.     // No try block necessary - Do not throw
  222.     gdev->SetResolution(x, y);
  223.     return FW_xNoError;
  224. }
  225.  
  226. //----------------------------------------------------------------------------------------
  227. //    FW_PrivGDev_CanvasChanged
  228. //----------------------------------------------------------------------------------------
  229.  
  230. void SL_API FW_PrivGDev_CanvasChanged(FW_HGDevice gdev, Environment *ev, ODCanvas* canvas)
  231. {
  232.     FW_SOM_TRY
  233.     {
  234.         gdev->CanvasChanged(ev, canvas);
  235.     }
  236.     FW_SOM_CATCH
  237. }
  238.